import { Container, Graphics, Sprite, Text } from "pixi.js";
import { EPhotoScale } from "../config/index";

type TDirection = "vertical" | "transverse";

interface IPhotoInfo {
  width: number;
  height: number;
  make: string; // 厂商
  logo: string; // 厂商logo
  customLogo?: string; // 自定义logo
  model: string; // 相机型号
  scale: EPhotoScale; // 照片比例
  padding: number; // 内边距
  direction: TDirection; // 图片方向
  iso: string | number; // ios
  f: string | number; // 光圈
  date: string; // 时间
  shutter: string; // 快门
  focus: string; // 焦距
  realFocus: string; // 等效焦距
  address: string; // 位置信息
  isSign: boolean; // 是否添加水印
}

interface ISceneConfig {
  totalW: number; // 总宽度
  totalH: number; // 总高度
  width: number; // 去除边距后的宽度
  height: number; // 去除边距后的高度
  infoHeight: number; // 照片信息高度
  infoPadding: number; // 照片信息边距
  imgHeight: number; // 照片高度
}

interface IGlobalConfig {
  scale: EPhotoScale; // 相纸比例
  padding: number; // 相纸边框
  address: string; // 默认地址
  dateFormat: string; // 日期格式
  maxPhotos: number; // 最大操作图片张数
  infoHeight: number; // 照片信息高度
  infoPadding: number; // 照片信息边距
  exportImgFileType: "png" | "jpg" | "webp"; // 导出图片类型
  isSign: boolean; // 是否添加水印
  customLogo: string; // 自定义logo
}

interface IPhotoCanvasData {
  container: Container; // 总容器
  innerContainer: Container; // 图片 + 水印容器容器
  photoSprite: Sprite; // 图片
  signContainer?: Container; // 水印容器
  makeLogo?: Sprite;
  modelText?: Text;
  exposureText?: Text;
  shootTimeText?: Text;
  positionText?: Text;
  graphics?: Graphics;
}
/* 
结构示例
const container = {
  innerContainer: {
    photoSprite,
    signContainer: {
      makeLogo,
      modelText,
      exposureText,
      shootTimeText,
      positionText,
      graphics,
    },
  },
}; 
*/

interface IPhotoData {
  id: number;
  name: string;
  originalPhoto: string; // 原始照片
  editPhoto?: string; // 编辑照片
  photoInfo: IPhotoInfo;
  sceneConfig: ISceneConfig;
  canvasData?: IPhotoCanvasData;
  globalConfig: IGlobalConfig;
}

type TScaleData = {
  [scale in EPhotoScale]: {
    height: number;
    width: number;
  };
};

export type {
  TScaleData,
  IPhotoInfo,
  ISceneConfig,
  IGlobalConfig,
  IPhotoData,
  TDirection,
  IPhotoCanvasData,
};
